package com.lianqi.emcpframework.extend.script;

import lombok.Getter;
import lombok.Setter;

import javax.script.ScriptException;
import java.util.function.Supplier;

/**
 * @program emcp-framework
 * @ClassName ExecuteResult
 * @description: 脚本执行结果
 * @author: sky
 * @create: 2018/12/04 19:22
 */
@Getter
@Setter
public class ExecuteResult {

    private boolean success;

    private Object result;

    private String message;

    private transient Exception exception;

    private long useTime;

    public Object get(){
        return result;
    }

    /**
     * 获取消息 如果有异常返回异常信息
     * @return 消息
     */
    public String getMessage(){
        if (message == null && exception != null){
            message = exception.getMessage();
        }
        return message;
    }

    /**
     * 解析成功 则返回结果 否则抛出异常
     * @return 解析结果
     * @throws Exception 异常
     */
    public Object getIfSuccess() throws Exception{
        if (!success){
            if (exception != null){
                throw exception;
            }else {
                throw new ScriptException(message);
            }
        }
        return result;
    }

    /**
     * 解析成功返回解析结果 不成功则返回指定的结果
     * @param defaultResult 指定结果
     * @return 结果
     */
    public Object getIfSuccess(Object defaultResult){
        if (!success){
            return defaultResult;
        }
        return result;
    }

    /**
     * 解析成功则返回解析结果 不成功返回提供者提供的结果
     * @param supplier 提供者
     * @return 结果
     */
    public Object getIfSuccess(Supplier<?> supplier){
        if (!success){
            return supplier.get();
        }
        return result;
    }

    @Override
    public String toString() {
        return String.valueOf(this.getResult());
    }


}
